package com.sinsoft.monitorDemo.dao;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;

import redis.clients.jedis.Jedis;

import com.google.gson.JsonArray;
import com.google.gson.JsonElement;
import com.google.gson.JsonObject;
import com.sinsoft.monitorDemo.entity.DiskInfo;
import com.sinsoft.monitorDemo.util.JsonUtil;
import com.sinsoft.monitorDemo.util.RedisUtil;

public class DiskInfoDao {
	/**
	 * 获取磁盘信息
	 * @param ip
	 * @return
	 */
	public List<Map<String, DiskInfo>> getDiskInfoList(String ip){
		Jedis jedis = RedisUtil.getJedis();
		List<String> jsonList = jedis.lrange("StatusData_" + ip + "_DISK_latest", 0, -1);
		JsonArray jsonArray = null;
		JsonObject jsonObject = null;
		DiskInfo diskInfo = null;
		List<Map<String, DiskInfo>> diskInfoList = new ArrayList<Map<String, DiskInfo>>();
		if (jsonList.size()>10) {
			for (int i = jsonList.size()-10; i < jsonList.size(); i++) {
				jsonArray = JsonUtil.JsonParse(jsonList.get(i));
				jsonObject = jsonArray.get(0).getAsJsonObject();
				Map<String, DiskInfo> diskMap = new HashMap<String, DiskInfo>();
				JsonObject disk_used_per = (JsonObject)jsonObject.get("disk_used_per");
				JsonObject disk_io_write = (JsonObject)jsonObject.get("disk_io_write");
				JsonObject disk_io_read = (JsonObject)jsonObject.get("disk_io_read");
				JsonObject disk_total = (JsonObject)jsonObject.get("disk_total");
				Set<Entry<String, JsonElement>> entrySet = disk_used_per.entrySet();
				for (Entry<String, JsonElement> entry : entrySet) {
					String diskTotalStr = disk_total.get(entry.getKey()).getAsString();
					Double diskTotal = Double.parseDouble(diskTotalStr.substring(0, diskTotalStr.length()-1));
					diskInfo = new DiskInfo(disk_used_per.get(entry.getKey()).getAsInt(), disk_io_read.get(entry.getKey()).getAsDouble(), 
							disk_io_write.get(entry.getKey()).getAsDouble(), diskTotal, jsonArray.get(1).getAsLong(), ip);
					diskMap.put(entry.getKey(), diskInfo);
				}
				diskInfoList.add(diskMap);
			}		
		} else {
			for (int i = 1; i < jsonList.size(); i++) {
				jsonArray = JsonUtil.JsonParse(jsonList.get(i));
				jsonObject = jsonArray.get(0).getAsJsonObject();
				Map<String, DiskInfo> diskMap = new HashMap<String, DiskInfo>(); 
				JsonObject disk_used_per = (JsonObject)jsonObject.get("disk_used_per");
				JsonObject disk_io_write = (JsonObject)jsonObject.get("disk_io_write");
				JsonObject disk_io_read = (JsonObject)jsonObject.get("disk_io_read");
				JsonObject disk_total = (JsonObject)jsonObject.get("disk_total");
				Set<Entry<String, JsonElement>> entrySet = disk_used_per.entrySet();
				for (Entry<String, JsonElement> entry : entrySet) {
					String diskTotalStr = disk_total.get(entry.getKey()).getAsString();
					Double diskTotal = Double.parseDouble(diskTotalStr.substring(0, diskTotalStr.length()-1));
					diskInfo = new DiskInfo(disk_used_per.get(entry.getKey()).getAsInt(), disk_io_read.get(entry.getKey()).getAsDouble(), 
							disk_io_write.get(entry.getKey()).getAsDouble(), diskTotal, jsonArray.get(1).getAsLong(), ip);
					diskMap.put(entry.getKey(), diskInfo);
				}
				diskInfoList.add(diskMap);
		}
		}
		jedis.close();
		return diskInfoList;		
	}
	
	/**
	 * 得到最新的disk信息
	 * @param ip
	 * @return
	 */
	public Map<String, DiskInfo> getNewDiskInfo(String ip){
		Jedis jedis = RedisUtil.getJedis();
		DiskInfo diskInfo;
		Map<String, DiskInfo> diskMap = new HashMap<String, DiskInfo>();
		try {
			List<String> jsonList = jedis.lrange("StatusData_" + ip + "_DISK_latest", -1, -1);
			JsonArray jsonArray = JsonUtil.JsonParse(jsonList.get(0));
			JsonObject jsonObject = jsonArray.get(0).getAsJsonObject();
			JsonObject disk_used_per = (JsonObject)jsonObject.get("disk_used_per");
			JsonObject disk_io_write = (JsonObject)jsonObject.get("disk_io_write");
			JsonObject disk_io_read = (JsonObject)jsonObject.get("disk_io_read");
			JsonObject disk_total = (JsonObject)jsonObject.get("disk_total");
			Set<Entry<String, JsonElement>> entrySet = disk_used_per.entrySet();
			for (Entry<String, JsonElement> entry : entrySet) {
				String diskTotalStr = disk_total.get(entry.getKey()).getAsString();
				Double diskTotal = Double.parseDouble(diskTotalStr.substring(0, diskTotalStr.length()-1));
				diskInfo = new DiskInfo(disk_used_per.get(entry.getKey()).getAsInt(), disk_io_read.get(entry.getKey()).getAsDouble(), 
						disk_io_write.get(entry.getKey()).getAsDouble(), diskTotal, jsonArray.get(1).getAsLong(), ip);
				diskMap.put(entry.getKey(), diskInfo);
			}
		} catch (Exception e) {
			// TODO Auto-generated catch block
			diskInfo = new DiskInfo(null, null, null, null, null,null);
			diskMap.put("/", diskInfo);	
		}finally{
			jedis.close();			
		}
		return diskMap;		
	}


}
